package com.centerm.structure.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.centerm.structure.domain.User;
import com.centerm.structure.dto.UserInfo;

/**
* @ClassName: UserDao
* @Description:用户数据层接口
* @author czy
* @date 2017年8月10日
 */
@Repository
public interface UserDao {

	/**
     * @Description: 获取所有用户记录
     * @author czy
     * @date 2017年8月10日
     * @param 
     * @return List<User>
      */
    List<User> listAll();
    
    /**
     * @Description: 根据条件获取用户记录
     * @author czy
     * @date 2017年8月10日
     * @param UserInfo:用户信息
     * @return List<User>
      */
	List<User> listByParam(UserInfo userInfo);
	
    /**
     * @Description: 获取所有用户名记录
     * @author czy
     * @date 2017年8月10日
     * @param 
     * @return List<User>
      */
    List<User> listAllName();
    
    /**
     * @Description: 根据id集合获取所有用户记录
     * @author czy
     * @date 2017年8月10日
     * @param ids：用户id集合
     * @return List<User>
      */
    List<User> listByIds(String[] ids);
    
    /**
	* @Description: 根据id删除记录
	* @author czy
	* @date 2017年8月10日
	* @param id
	* @return int
	 */
    int deleteById(Integer id);

    /**
     * @Description: 新增记录
     * @author czy
     * @date 2017年8月10日
     * @param record 用户记录
     * @return int
      */
    int insert(User record);

    /**
     * @Description: 根据id获取记录
     * @author czy
     * @date 2017年8月10日
     * @param id
     * @return 记录
      */
    User getById(Integer id);

    /**
     * @Description: 更新记录（只针对非空字段）
     * @author czy
     * @date 2017年8月10日
     * @param record 记录
     * @return int
      */
    int update(User record);

    /**
     * @Description: 根据id获取用户详细信息（包括部门名称）
     * @author czy
     * @date 2017年8月10日
     * @param id
     * @return 记录
      */
    UserInfo getUserInfoById(@Param("id") Integer id);

    /**
     * @Description 根据条件查询用户列表（包括部门名称）
     * @author lk
     * @date 2017年9月4日
     * @param userInfo  查询条件
     * @param list      查询条件部门ID列表
     * @return
     */
    List<UserInfo> listUserInfoByParam(@Param("userInfo") UserInfo userInfo,
            @Param("list") List<Integer> list);

    /**
     * @Description 根据部门ID列表查询所有用户
     * @author lk
     * @date 2017年9月1日
     * @param departmentIdList
     * @return
     */
    List<UserInfo> listUserInfoByDepartmentList(@Param("list") List<Integer> list);
}